# -*- coding: utf-8 -*-
"""
选币策略框架 | 邢不行 | 2024分享会
author: 邢不行
微信: xbx6660
"""


# ================================================================================================
# 新增内容 (2024-06-25)
# - 新增同因子多参数聚合计算函数`signal_multi_params`
# - 如果因子实现 `signal_multi_params` 会优先使用聚合计算
# - 原因子可以继续使用 `signal` 计算 factor，老的因子不改写不影响程序运行
# - 聚合计算可以提高因子计算速度，速度提升大概 3 倍，参数越多越明显
# - 具体改写可参考：【更新必看】中性策略框架v2.1.12更新说明 (https://bbs.quantclass.cn/thread/43067)
# ================================================================================================

def signal(*args):
    df = args[0]
    n = args[1]
    factor_name = args[2]

    df[factor_name] = df['close'].pct_change(n)

    return df


# 建议改写之前，看一下帖子说明：
# 【更新必看】中性策略框架v2.1.12更新说明 (https://bbs.quantclass.cn/thread/43067)
def signal_multi_params(df, param_list) -> dict:
    """
    使用同因子多参数聚合计算，可以有效提升回测、实盘 cal_factor 的速度，
    相对于 `signal` 大概提升3倍左右
    :param df: k线数据的dataframe
    :param param_list: 参数列表
    """
    ret = dict()
    for param in param_list:
        n = int(param)
        ret[str(param)] = df['close'].pct_change(n)
    return ret
